#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <pthread.h>
#include <sched.h>

int ticket = 0;
pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t cond = PTHREAD_COND_INITIALIZER;

void *route(void *arg)
{
	char *id = (char *)arg;
	while (1)
	{
		pthread_mutex_lock(&mutex);
		if (ticket > 0)
		{
			printf("%s sells ticket:%d\n", id, ticket);
			ticket--;
			pthread_mutex_unlock(&mutex);
		}
		else
		{
			printf("%s wait on cond!\n", id);
			pthread_cond_wait(&cond,&mutex);
		}
		pthread_mutex_unlock(&mutex);

	}
	return nullptr;
}

int main(void)
{
	pthread_t t1, t2, t3, t4;
	pthread_create(&t1, NULL, route, (void *)"thread 1");
	pthread_create(&t2, NULL, route, (void *)"thread 2");
	pthread_create(&t3, NULL, route, (void *)"thread 3");
	pthread_create(&t4, NULL, route, (void *)"thread 4");

	while (true)
	{
		printf("开始放票！");
		sleep(5);
		ticket += 5;
		pthread_cond_signal(&cond);
	}
	pthread_join(t1, NULL);
	pthread_join(t2, NULL);
	pthread_join(t3, NULL);
	pthread_join(t4, NULL);
	return 0;
}